//
//  people.swift
//  GDSwift
//
//  Created by 热带雨林 on 2021/1/9.
//  Copyright © 2021 热带雨林. All rights reserved.
//

import UIKit
//kvc构造函数
//  kvc构造函数的目的-> 字典转模型
//  kvc的本质  -> 基于运行时,向'对象'动态发送setValue: forKey: 这个消息,给对象身上的属性赋值
// kvc走属性的 setter getter 方法
class people: NSObject {
    
    //swift4.0中要加上@objc，否则在外面调用不到

    @objc var name: String

    @objc var age: Int
    
//    var name: String
//    
//    var age: Int
    
    /**
     var name: String?
     //  age属性与kvc 不兼容 , 原因 kvc是oc特有的, 在oc里面基本数据类不存在nil这个概念
     //  解决办法 -> 给基本数据类型初始化
     var age: Int = 0
     */
    
    //KVC 构造方法
    init(dic: [String: Any]) {
         
        name = "nihao"
        age = 22
        
        super.init()
        // 表示对象创建完成，现将对象创建完成，再进行赋值
        //必须先创建对象，然后进行赋值
        //  使用kvc给对象的属性赋值
        
        
        //  遍历字典依次调用setValue: forKey: 这个方法
        setValuesForKeys(dic)
    }
    
    //setvalue forkey
    override func setValue(_ value: Any?, forKey key: String) {
        //  必须调用super.setvalue(value, forkey: key)
        //  判断key在类里面是否定义,如果定义了那么直接给属性赋值,否则调用func setValue(_ value: Any?, forUndefinedKey key: String)
        super.setValue(value, forKey: key)
    }
    
    
    //setValue forUndefinedKey
    override func setValue(_ value: Any?, forUndefinedKey key: String) {
        
    }
    
    
    
    
    
}
